package org.soderiakelvy.controller.sujeto;


import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.Validar;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.SujetoVO;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.service.SucursalServicio;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SucursalServicioImp;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;

@ManagedBean
@ViewScoped
public class SujetoResidencialCreate1 {
	//-- VO --
	private SujetoVO sujeto;
	private SucursalVO sucursal;
	
	// variables para validar
	private String deshabilitarGuardar = "true";
	private boolean nombreValido;
	private boolean apellidoValido;
	private boolean barrioValido;
	private boolean calleValido;
	private boolean numeroValido;
	private boolean tipoClienteValido;
	private String numero = "";
	
	private SucursalServicio servicio = new SucursalServicioImp();

	private List<TipoClienteVO> tiposDeClientes;
	
	//--- CONSTRUCTOR ---
	public SujetoResidencialCreate1(){
		sujeto = new SujetoVO();
		sucursal = new SucursalVO();
		numero = "";
	}
	
	//--- IR PASO DOS ---
	public String cargarVisita(SujetoVO psujeto){
		
		this.sucursal.setSujeto(psujeto);
		
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		sessionParams.put("sucursal", sucursal);
		
		return Constante.URL_RESIDENCIAL_ALTA_PASO_DOS;
	}
	
	//---METODOS PARA LA VALIDACION-----
	
	public void listenerNombre(){
		if (this.sucursal.getNombre().isEmpty()||this.sucursal.getNombre() ==null){
			this.deshabilitarGuardar = "true";
			this.nombreValido = false;
			FacesContext.getCurrentInstance().addMessage("form::errorlblNombre", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Sujeto no puede ser Vacio", "para continuar "));
		}else{
			this.nombreValido = true;
			if (this.apellidoValido && this.barrioValido && this.calleValido && this.numeroValido && this.tipoClienteValido) {
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
			}	
		}
	}
	
	public void listenerApellido(){
		
		if (this.sucursal.getApellido().isEmpty()||this.sucursal.getApellido() == null){
			this.deshabilitarGuardar = "true";
			this.apellidoValido = false;
			FacesContext.getCurrentInstance().addMessage("form::errorlblApellido", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El apellido del Sujeto no puede ser Vacio", "para continuar "));
		}else{
			this.apellidoValido = true;
			if (this.nombreValido && this.barrioValido && this.calleValido && this.numeroValido && this.tipoClienteValido) {
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
			}	
		}
	}
	
	public void listenerBarrio(){
		if (this.sucursal.getBarrio().isEmpty()||this.sucursal.getBarrio() == null){
			this.deshabilitarGuardar = "true";
			this.barrioValido = false;
			FacesContext.getCurrentInstance().addMessage("form::errorlblBarrio", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Barrio del Sujeto no puede ser Vacio", "para continuar "));
		}else{
			this.barrioValido = true;
			if (this.nombreValido && this.apellidoValido && this.calleValido && this.numeroValido  && this.tipoClienteValido) {
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
			}	
		}
	}
	
	public void listenerCalle(){
		if (this.sucursal.getCalle().isEmpty()||this.sucursal.getCalle() == null){
			this.deshabilitarGuardar = "true";
			this.calleValido = false;
			FacesContext.getCurrentInstance().addMessage("form::errorlblCalle", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"La  Calle del Sujeto no puede ser Vacio", "para continuar "));
		}else{
			this.calleValido = true;
			if (this.nombreValido && this.barrioValido && this.apellidoValido && this.numeroValido  && this.tipoClienteValido) {
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
			}	
		}
	}
	
	public void listenerNumero(){
		if (Validar.isNumeroEntero(this.numero)){
			sucursal.setNumero(Integer.parseInt(this.numero));
			if (sucursal.getNumero() > 0){
				this.numeroValido = true;
				if (this.nombreValido && this.barrioValido && this.calleValido && this.apellidoValido  && this.tipoClienteValido) {
					this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
				}	
			}else{ 
				this.deshabilitarGuardar = "true";
				this.numeroValido = false;
				FacesContext.getCurrentInstance().addMessage("form::errorlblNumero", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Numero debe mayor que 0", "para continuar "));
			}
		}else{
			FacesContext.getCurrentInstance().addMessage("form::errorlblNumero", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Numero debe ser un numerico", "para continuar "));
			this.deshabilitarGuardar = "true";
			this.numeroValido = false;
		}
	}
	
	public void listenerTipoCliente(){
		if (sujeto.getTipoCliente().getTipoClienteId() > 0){
			this.tipoClienteValido = true;
			if (this.nombreValido && this.apellidoValido && this.barrioValido && this.calleValido && this.numeroValido) {
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
				System.out.println("HABILITO GUARDAR  en tipoCliente");
			}	
		}else{ 
			this.deshabilitarGuardar = "true";
			this.tipoClienteValido = false;
			FacesContext.getCurrentInstance().addMessage("form::errorlblTipoCliente", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"Debe Seleccionar un Tipo de Cliente", "para continuar "));
		}
	}
	
	//----------------------------------
	
	// TODO Get and Set
	public SujetoVO getSujeto() {
		return sujeto;
	}

	public void setSujeto(SujetoVO sujeto) {
		this.sujeto = sujeto;
	}

	public void setTiposDeClientes(List<TipoClienteVO> tiposDeClientes) {
		this.tiposDeClientes = tiposDeClientes;
	}

	public List<TipoClienteVO> getTiposDeClientes() {
		return tiposDeClientes;
	}

	public SucursalVO getSucursal() {
		return sucursal;
	}

	public void setSucursal(SucursalVO sucursal) {
		this.sucursal = sucursal;
	}
	public String getDeshabilitarGuardar() {
		return deshabilitarGuardar;
	}
	public void setDeshabilitarGuardar(String deshabilitarGuardar) {
		this.deshabilitarGuardar = deshabilitarGuardar;
	}
	public String getNumero() {
		return numero;
	}
	public void setNumero(String numero) {
		this.numero = numero;
	}	
	
}
